package com.tedu.api.thread;

import org.junit.Test;

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式-->()->{}【接口/抽象类--匿名内部类】
 *                     【集合遍历--匿名内部类】
 *collection---->List:存重复元素开且有序【保存数据结构一致】
 *               Set:存无序并且不重复【保存数据结构一致】
 *               Queue:队列结合业务
 *Map------------->HashMap:键对值存储
 */
public class LanbdaDemo {
    @Test
    public void testList(){
        //List集合：保存元素
        List<String> list=new ArrayList<>();
        list.add("白洋淀");
        list.add("正定古城");
        list.add("河头老街");
        list.add("白石山");
        //集合3种遍历方式：普通for、增强for、forEach方法
        for (String str:list){
        System.out.println("增强for:"+str);
        }
        //支持forEach方法:遍历集合元素
        //Consumer接口针对List集合提供接口：功能获取list
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println("consumer接口遍历方法："+s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s-> System.out.println("Lambda遍历方案："+s));
    }
          @Test
         public void testMap(){
        //创建Map集合：键值对
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"唐山");
        map.put(2,"石家庄");
        map.put(3,"沧州");
        map.put(4,"邯郸");
        //遍历集合：普通for,增强for,forEach(BiConSummer)
        //键值对-->一组Entry对象
        //BiConSummer 接口--获取每组Entry对象--accept
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println("键："+integer+"值");
            }
        });
        //使用Lambda表达式
              map.forEach((integer,s)->System.out.println("Lambda表达式遍历："+"键："+integer+" 值："+s));
          }
//    作业:1.使用Lambda表达式完成 Thread线程创建
//         2.使用Lambda表达式完成 Runnable线程创建
//          3.I0流--File类:listFile(FileFilter接)【5行代码)
//           目标:【io包下FilterAPI类】实现使用Lambda表达式完成
//            4.I0流--File类:listFile(FileFilter接曰)【2行代码】
//            目标:【io包下FilterAPI类】实现使用Lambda表达式完成
//             5.集合:改成lambda写法
//               目标:【list包下ListAPI类下单元测试:testComparator()】
//    LambdaDemo类下--完成作业
//    @LambdaHomeWork1
//    @LambdaHomeWork2
//    提交11/8 中午12前



 //homework1
    @Test
    public void testHomework1(){
        //使用Lambda表达式完成 Thread线程
        //Thread类 Java定义线程类--具备启动start---
        //Thread类封装Runable类--线程run运行
        Thread  t1=new Thread(()->{for (int i=0;i<1000;i++){
            System.out.println("给我学的666");
        }});
        t1.start();
    }
    @Test
    public void testHomework2(){
        Runnable mr1=()->{for(int i=0;i<1000;i++){
            System.out.println("777");
        }};
        Thread t2=new Thread();
        t2.start();
    }
    @Test
    public void testLambda(){
            List<String> list=new ArrayList<>();
            list.add("阿西吧");
            list.add("搜都寺内");
            list.add("呦西");
            Collections.sort(list,(o1, o2) -> o2.length()-o1.length());
            System.out.println("排序后集合："+list);
    }
}
